<!DOCTYPE html>
<html lang="zh-CH" >
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="author" content="" />
	
	
	
	<title>Unity官方文档翻译之 创建 assetbundle ｜ zansimple</title>
	
    
    
    <meta name="description" content="前言 在 assetbundle 工作流一篇中我们知道了一个带有三个参数的的方法这里让我们深入的去了解一下这个方法。 BuildPipeline.BuildAssetBundles(string outpath , BuildAssetBundleOptions.None,BuildTarget.Standalone)， Assets/AssetBundles 这是 assetbundle 将要被打包进的路径（outpath） 这个路径可以在你的磁盘里随意设置，只要确定 assetbundle 打包的时候这个路径存在就 OK 了。
正文 BuildAssetBundleOptions 你可以指定不同的内置的 BuildAssetBundleOptions ，它们有各自的效果。有关这个 eunm 其他的选项 你可以参阅关于BuildAssetBundleOptions 的脚本API参考资料 你可以根据项目的需要，选择不同的选项，这里介绍三个涉及到 assetbundle 压缩方式的选项
 BuildAssetBundleOptions.None：这个选项是 AssetBundle 用 LZMA 的格式进行压缩，它会把序列化数据文件压缩成一个单独的 LZMA 流。LZMA 算法会在使用之前将整个包全部解压缩，这就导致了，即使你是用了很小的一个文件，仍然需要很长的加载时间。值得注意的是，用这个选项时，当你用包中的任何资源的时候，就必须将整个 assetbundle 包解压缩。 一旦解压缩之后，它将再次用 LZ4 算法压缩并且存入磁盘中。但是这个算法在你是用的时候不需要将整个包解压缩。这种算法最好使用在一个assetbundle 包含了很多资源，当我们获取了其中一个资源的时候其他的资源也将会被陆续加载。比如：一个角色或者一个场景的所有资源。 LZMA 算法只推荐使用在从远程服务器下载的小文件作为初始化用。一旦下载下来，它将缓存为 LZ4 算法压缩的 assetbundle 文件 BuildAssetBundleOptions.UncompressedAssetBundle：这个选项是在你打包 assetbundle 的时候完全不压缩，这就导致了文件包体太大下载时间变长，但是一旦下载下来，加载的速度会很快。 BuildAssetBundleOptions. ChunkBasedCompression：这个选项是用LZ4算法压缩，这样会使 Assetbundle 比用 LZMA 算法压缩的包体更大，但是使用其中的资源的时候不会将整个包解压缩。LZ4 是一种基于数据块的算法，这个算法在将 assetbundle 加载成单个的数据块，当一个数据块被解压后，其中包含的资源就可以使用，即使这个 assetbundle 中其他的数据块还没有被解压。 使用这个方法压缩的 assetbundle 包与未压缩的 assetbundle 包有差不多的加载时间，但是降低了磁盘的占用空间。  BuildTarget BuildTarget." />
    

    

	
    
    <link rel="shortcut icon" href="https://lenzan.github.io/images/favicon.ico" />

    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/normalize.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://cdn.jsdelivr.net/npm/animate.css@4.1.0/animate.min.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/zozo.css" />
	<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.jsdelivr.net/npm/remixicon@2.5.0/fonts/remixicon.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/highlight.css" />

    
    
</head>

<body>
    <div class="main animate__animated animate__fadeInDown">
        <div class="nav_container animated fadeInDown">
    <div class="site_nav" id="site_nav">
        <ul>
            
            <li>
                <a href="/">首页</a>
            </li>
            
            <li>
                <a href="/">unity</a>
            </li>
            
            <li>
                <a href="/">归档</a>
            </li>
            
            <li>
                <a href="/">关于</a>
            </li>
            
        </ul>
    </div>
    <div class="menu_icon">
        <a id="menu_icon"><i class="ri-menu-line"></i></a>
    </div>
</div>
        <div class="header animated fadeInDown">
    <div class="site_title_container">
        <div class="site_title">
            <h1>
                <a href="https://lenzan.github.io/">
                    <span>zansimple</span>
                    <img src="https://lenzan.github.io/images/logo.svg" />
                </a>
            </h1>
        </div>
        <div class="description">
            <p class="sub_title">专注于Unity虚拟现实开发，游戏开发</p>
            <div class="my_socials">
                
                <a href="https://lenzan.github.io/index.xml" type="application/rss+xml" title="rss" target="_blank"><i
                        class="ri-rss-fill"></i></a>
            </div>
        </div>
    </div>
</div>
        <div class="content">
            <div class="post_page">
                <div class="post animate__animated animate__fadeInDown">
                    <div class="post_title post_detail_title">
                        <h2><a href='/posts/assetbundle/building-assetbundles/'>Unity官方文档翻译之 创建 assetbundle</a></h2>
                        <span class="date">2018.05.24</span>
                    </div>
                    <div class="post_content markdown"><h2 id="前言">前言</h2>
<p>在 assetbundle 工作流一篇中我们知道了一个带有三个参数的的方法这里让我们深入的去了解一下这个方法。
BuildPipeline.BuildAssetBundles(string outpath , BuildAssetBundleOptions.None,BuildTarget.Standalone)，
Assets/AssetBundles 这是 assetbundle 将要被打包进的路径（outpath） 这个路径可以在你的磁盘里随意设置，只要确定 assetbundle 打包的时候这个路径存在就 OK 了。</p>
<h2 id="正文">正文</h2>
<h3 id="buildassetbundleoptions">BuildAssetBundleOptions</h3>
<p>你可以指定不同的内置的 BuildAssetBundleOptions ，它们有各自的效果。有关这个 eunm 其他的选项 你可以参阅关于BuildAssetBundleOptions 的脚本API参考资料
你可以根据项目的需要，选择不同的选项，这里介绍三个涉及到 assetbundle 压缩方式的选项</p>
<ol>
<li>BuildAssetBundleOptions.None：这个选项是 AssetBundle 用 LZMA 的格式进行压缩，它会把序列化数据文件压缩成一个单独的 LZMA 流。LZMA 算法会在使用之前将整个包全部解压缩，这就导致了，即使你是用了很小的一个文件，仍然需要很长的加载时间。值得注意的是，用这个选项时，当你用包中的任何资源的时候，就必须将整个 assetbundle 包解压缩。
一旦解压缩之后，它将再次用 LZ4 算法压缩并且存入磁盘中。但是这个算法在你是用的时候不需要将整个包解压缩。这种算法最好使用在一个assetbundle 包含了很多资源，当我们获取了其中一个资源的时候其他的资源也将会被陆续加载。比如：一个角色或者一个场景的所有资源。
LZMA 算法只推荐使用在从远程服务器下载的小文件作为初始化用。一旦下载下来，它将缓存为 LZ4 算法压缩的 assetbundle 文件</li>
<li>BuildAssetBundleOptions.UncompressedAssetBundle：这个选项是在你打包 assetbundle 的时候完全不压缩，这就导致了文件包体太大下载时间变长，但是一旦下载下来，加载的速度会很快。</li>
<li>BuildAssetBundleOptions. ChunkBasedCompression：这个选项是用LZ4算法压缩，这样会使 Assetbundle 比用 LZMA 算法压缩的包体更大，但是使用其中的资源的时候不会将整个包解压缩。LZ4 是一种基于数据块的算法，这个算法在将 assetbundle 加载成单个的数据块，当一个数据块被解压后，其中包含的资源就可以使用，即使这个 assetbundle 中其他的数据块还没有被解压。
使用这个方法压缩的 assetbundle 包与未压缩的 assetbundle 包有差不多的加载时间，但是降低了磁盘的占用空间。</li>
</ol>
<h3 id="buildtarget">BuildTarget</h3>
<p>BuildTarget.Standalone: 这个参数是用来告诉流水线将要使用那个平台进行打包，你可以在 BuildTarget 这个 API 上找到所有的选项。当然，如果你不想硬编码 BuildTarget ,你也可以使用 EditorUserBuildSettings.activeBuildTarget ，它可以根据你当前的编译平台自动找到对应的平台来创建 Assetbundle 。</p>
<p>脚本写好之后，你就可以创建 Assetbundle 了。点击 Assets/Build AssetsBundles 来创建。</p>
<p>现在你已经成功的创建了 AssetBundles 了。你可以注意到你的 assetbundle 文件里面多于你创建的 assetbundle 文件。确切来说应该是2*（n+1）个多于出来的文件，让我们花点时间来复习一下 BuildPipeline.BuildAssetBundles 这个方法</p>
<p>在编辑器中你可以看到你每个指定的 assetbundle 文件，你都会看到有个跟它同名的 “.manifest” 文件
另外还有一个额外的 bundle ，并且 manifest 文件的名字没有和任何一个你创建的 assetbundle 包重名，实际上，他是以所在的文件夹来命名，这就是 Assetbundle Bundle 。我们将会讨论更多关于它的内容并且在将来怎么使用它们。</p>
<h3 id="the-assetbundle文件">The AssetBundle文件</h3>
<p>这个 file 是指没有带 “.manifest” 并且在运行的时候加载的并用其中的资源的文件。
Assetbundle 文件是内部包含了多个文件的归档文件。这个归档文件的结构可以根据它是一个普通的 assetbundle 还是一个场景的 assetbundle 有稍微的变化。下面是一个普通 assetbundle 的内部结构图
<img src="/img/assetbundle/assetbundle.png" alt="avatar">
场景 assetbundle 不同于普通 assetbundle 的是，场景的加载数据流和他说包含的内容都有所优化</p>
<h3 id="the-manifest文件">The Manifest文件</h3>
<p>对于每个生成的 assetbundle ，包括额外生成的 manifest Bundle ,都会随之生成一个 “.manifest” 文件。这个文件可以用任何编辑器打开，里面包含了一些 assetbundle 相关的信息，比如循环冗余检查（CRC）以及其他的依赖数据。普通的 assetbundle 的 manifest 文件是这样的</p>
<pre><code>    ManifestFileVersion: 0
    CRC: 2422268106
    Hashes:
    AssetFileHash:
        serializedVersion: 2
        Hash: 8b6db55a2344f068cf8a9be0a662ba15
    TypeTreeHash:
        serializedVersion: 2
        Hash: 37ad974993dbaa77485dd2a0c38f347a
    HashAppended: 0
    ClassTypes:
    - Class: 91
    Script: {instanceID: 0}
    Assets:
    Asset_0: Assets/Mecanim/StateMachine.controller
    Dependencies: {}
</code></pre>
<p>Manifest Bundle 的 manifest 文件是这样的</p>
<pre><code>    ManifestFileVersion: 0
    AssetBundleManifest:
    AssetBundleInfos:
        Info_0:
        Name: scene1assetbundle
        Dependencies: {}
</code></pre>
<p>显示了 assetbundle 是如何关联的以及他们的依赖是什么。
现在只需要理解这个包中包含了 AssetBundleManifest 对象，对运行的时候加载那个依赖的 assetbundle 非常有用
要了解更多关于如何使用这个 bundle 和 manifest 对象的信息,请参阅关于使用 assetbundle 的文档。</p>
</div>
                    <div class="post_footer">
                        
                        <div class="meta">
                            <div class="info">
                                <span class="field tags">
                                    <i class="ri-stack-line"></i>
                                    
                                    <a href="https://lenzan.github.io/tags/Unity3D/">Unity3D</a>
                                    
                                    <a href="https://lenzan.github.io/tags/AssetBundle/">AssetBundle</a>
                                    
                                </span>
                            </div>
                        </div>
                        
                    </div>
                </div>
                
                
            </div>
        </div>
    </div>
    <a id="back_to_top" href="#" class="back_to_top"><span>△</span></a>
    <footer class="footer">
    <div class="powered_by">
        <a href="https://varkai.com">Designed by VarKai,</a>
        <a href="http://www.gohugo.io/">Proudly published with Hugo</a>
    </div>

    <div class="footer_slogan">
        <span></span>
    </div>
</footer>
    <script src="https://lenzan.github.io/js/jquery-3.5.1.min.js"></script>
<link href="https://lenzan.github.io/css/fancybox.min.css" rel="stylesheet">
<script src="https://lenzan.github.io/js/fancybox.min.js"></script>
<script src="https://lenzan.github.io/js/zozo.js"></script>






</body>

</html>